package com.urbane.auth.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;

/**
 * 用户登录请求数据传输对象（DTO）
 * 功能：
 *   - 前端提交登录凭证：用户名 + 密码
 *   - 用于 AuthService.login() 方法
 *
 * 安全要求：
 *   - 密码必须为明文（由服务端 BCrypt 加密比对）
 *   - 禁止返回密码哈希值
 *   - 输入必须校验长度和非空
 *
 * 校验规则：
 *   - username: 非空，长度 3~30 字符（支持字母、数字、下划线）
 *   - password: 非空，长度 8~128 字符（强制要求复杂度由业务层控制）
 */
@Data
public class LoginRequest {

    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 30, message = "用户名长度必须在 3 到 30 个字符之间")
    private String username;

    @NotBlank(message = "密码不能为空")
    @Size(min = 8, max = 128, message = "密码长度必须在 8 到 128 个字符之间")
    private String password;

    // ==================== 构造函数 ====================

    public LoginRequest() {}

    public LoginRequest(String username, String password) {
        this.username = username;
        this.password = password;
    }

    // ==================== 示例 JSON 请求 ====================
    // {
    //   "username": "zhangsan",
    //   "password": "MyPass123!"
    // }
}